home *** CD-ROM | disk | FTP | other *** search
/ Venus 7000 / darktronics.iso / Software / Service Packs / WinXPSP1.exe / appwiz.cp_ / appwiz.cpl / HTML / LISTBOX.HTC < prev    next >
Encoding:
Text File  |  2002-08-29  |  18.6 KB  |  841 lines

  1. <PUBLIC:HTC URN="shellctls"><METHOD name="ResetSelection" /><METHOD name="EnableTemplate" /><METHOD name="Refresh" /><METHOD name="focus" /><METHOD name="blur" /><EVENT id=onSelectItem name="onSelectItem" /><EVENT id=onCustomDraw name="onCustomDraw" /><EVENT id=onSetFocus name="onSetFocus" /><EVENT id=onListComplete name="onListComplete" /><ATTACH event="oncontentready" handler=_OnContentReady /><SCRIPT language="javascript">
  2. var _bLoading = true; 
  3. var _tblList = null; 
  4. var _idDisplayName; 
  5. var _divScroll = null; 
  6. var _iSelCur = -1; 
  7. var _iSelDefault = -1; 
  8. var _nItemsPerPage = 0; 
  9. var _idDataSource; 
  10. var _ctlDataSource = null; 
  11. var _szRecordSetName = ""; 
  12. var _idTemplateSource; 
  13. var _cRowsExpand = 0; 
  14. var _cRowsAdded = 0; 
  15. var _bAutoExpand = false; 
  16. var _rgTemplateRows = new Array();
  17. var _htmlRow; 
  18. var _bHasFocus = false; 
  19. var _bFreeze = false; 
  20. var _bTableComplete = false; 
  21. var _bInternalFocusChange = false; 
  22. var _szFeedBack = ""; 
  23. var _dvFeedBack = null; 
  24. var c_szStyle_Background = 
  25. 'style = "' +
  26.         'position:relative; '           +
  27.         'width:100%; '                  +
  28.         'height:100%; '                 +
  29.         'overflow-y:scroll; '           +
  30.         'border: 1px solid buttonface; '+
  31.         '"';
  32. var c_szStyle_Table = 
  33. 'style = "' +
  34.         'table-layout:fixed; '          +
  35.         'width:100%; '                  +
  36.         'height:auto; '                 +
  37.         '"';
  38. var c_szStyle_Feedback =
  39. 'style = "' +
  40.         'position:relative; '           +
  41.         'width:100%; '                  +
  42.         'height:100%; '                 +
  43.         'border: 1px solid buttonface; '+
  44.         '"';
  45. element.attachEvent("onkeydown", _OnKeyDown);
  46. element.attachEvent("onerror", _OnError);
  47. _GetPropertyDefaults();
  48. function get_selIndex() { return _iSelCur; }
  49. function put_selIndex(iSel) 
  50. if (_bLoading)
  51. return;
  52. _SelectItem(parseInt(iSel), true);
  53. }
  54. function get_defaultSel() { return _iSelDefault; }
  55. function put_defaultSel(iSel) 
  56. if (_bLoading)
  57. return;
  58. _iSelDefault = parseInt(iSel);
  59. }
  60. function get_dataSource() { return _idDataSource; }
  61. function put_dataSource(szDatasrc) 
  62. if (_bLoading)
  63. return;
  64. if (_ctlDataSource)
  65. {
  66. _ctlDataSource.detachEvent("onrowsdelete", _OnRowsDelete);
  67. if (_tblList)
  68. _tblList.detachEvent("onreadystatechange", _OnTableReady);
  69. }
  70. if ("" == szDatasrc)
  71. {
  72. _idDataSource = null;
  73. _ctlDataSource = null;
  74. }
  75. else
  76. {
  77. _idDataSource = szDatasrc;
  78. _SetDataSourceObject(szDatasrc);
  79. }
  80. if (_ctlDataSource)
  81. {
  82. _ctlDataSource.attachEvent("onrowsdelete", _OnRowsDelete);
  83. if (_tblList)
  84. _tblList.attachEvent("onreadystatechange", _OnTableReady);
  85. }
  86. }
  87. function get_autoExpand() { return _bAutoExpand; }
  88. function put_autoExpand(bAutoExpand) 
  89. if (_bLoading)
  90. return;
  91. _bAutoExpand = (bAutoExpand) ? true : false;
  92. }
  93. function get_freeze() { return _bFreeze; }
  94. function put_freeze(bFreeze)
  95. if (_bLoading)
  96. return;
  97. _bFreeze = (bFreeze) ? true : false;
  98. }
  99. function get_templateSource() { return _idTemplateSource; }
  100. function put_templateSource(szId)
  101. if (_bLoading)
  102. return;
  103. _idTemplateSource = szId;
  104. _ResetTemplateStore();
  105. }
  106. function get_feedBack() { return _szFeedBack; }
  107. function put_feedBack(szText)
  108. {
  109. _szFeedBack = szText;
  110. if (_szFeedBack == "")
  111. {
  112. if (_dvFeedBack != null) 
  113. _dvFeedBack.style.display = 'none';
  114. }
  115. else
  116. {
  117. if (_dvFeedBack != null)
  118. {
  119. _dvFeedBack.style.display = '';
  120. _dvFeedBack.innerHTML = _szFeedBack;
  121. }
  122. if (_tblList != null)
  123. {
  124. _tblList.style.display = 'none';
  125. }
  126. }
  127. }
  128. function _OnContentReady()
  129. {
  130. _bLoading = false;
  131. _PrepHTML();
  132. }
  133. function _OnTableReady()
  134. {
  135. var tblElem = window.event.srcElement;
  136. if ("complete" == tblElem.readyState)
  137. {
  138. if ((null != _tblList) && (_szFeedBack == "") && _tblList.style.display == 'none')
  139. {
  140. _tblList.style.display = '';
  141. }
  142. var recordset = _GetRecordset();
  143. if (recordset && recordset.state != 0)
  144. {
  145. evt = createEventObject();
  146. evt.tableList = tblElem;
  147. onListComplete.fire(evt);
  148. if (-1 != _iSelDefault && _iSelDefault < _tblList.rows.length)
  149. {
  150. _SelectItem(_iSelDefault, true);
  151. }
  152. _bTableComplete = true;
  153. _CalcItemsPerPage();
  154. }
  155. }
  156. else if ("loading" == tblElem.readyState)
  157. {
  158. if (_bTableComplete)
  159. {
  160. _InternalResetSelection();
  161. }
  162. else
  163. {
  164. _tblList.style.display = '';
  165. }
  166. }
  167. else if ("interactive" == tblElem.readyState)
  168. {
  169. _tblList.style.display = '';
  170. }
  171. }
  172. function _OnDocumentLoad()
  173. {
  174. _ScanSpecialElements();
  175. _CreateHTML();
  176. }
  177. function _ResetTemplateStore()
  178. {
  179. _cRowsExpand = 0;
  180. _rgTemplateRows = new Array();
  181. }
  182. function _GetPropertyDefaults()
  183. {
  184. if (element.dataSource)
  185. {
  186. _idDataSource = element.dataSource;
  187. _SetDataSourceObject(_idDataSource);
  188. if (_ctlDataSource)
  189. _ctlDataSource.attachEvent("onrowsdelete", _OnRowsDelete);
  190. }
  191. if (element.selectionIndex)
  192. _iSelCur = parseInt(element.selectionIndex);
  193. if (element.defaultSelection)
  194. _iSelDefault = parseInt(element.defaultSelection);
  195. if (element.autoExpand)
  196. _bAutoExpand = ('false' != element.autoExpand) ? true : false;
  197. if (element.freeze)
  198. _bFreeze = ('false' != element.freeze) ? true : false;
  199. if (element.feedBack)
  200. _szFeedBack = element.feedBack;
  201. if (element.templateSource)
  202. _idTemplateSource = element.templateSource;
  203. }
  204. function _SetDataSourceObject(szDatasrc)
  205. {
  206. var rgszDatasrc = szDatasrc.split('.');
  207. _ctlDataSource = window.document.applets(rgszDatasrc[0])
  208. if (rgszDatasrc.length > 1)
  209. {
  210. _szRecordSetName = rgszDatasrc[1];
  211. }
  212. else
  213. _szRecordSetName = "";
  214. }
  215. function _GetRecordset()
  216. {
  217. var recordset = null;
  218. if (_ctlDataSource)
  219. recordset = _ctlDataSource.namedRecordset(_szRecordSetName);
  220. return recordset;
  221. }
  222. function _CalcItemsPerPage()
  223. {
  224. if (null == _tblList || 0 == _tblList.rows.length)
  225. {
  226. _nItemsPerPage = 0;
  227. return;
  228. }
  229. var iItem = (_iSelCur != 0) ? 0 : _tblList.rows.length - 1;
  230. var dySelItem = 0;
  231. if (-1 != _iSelCur)
  232. dySelItem = _tblList.rows(_iSelCur).offsetHeight;
  233. if (0 <= iItem)
  234. {
  235. var dyItem = _tblList.rows(iItem).offsetHeight;
  236. if (0 != dyItem)
  237. {
  238. _nItemsPerPage = Math.round((_divScroll.offsetHeight - dySelItem) / dyItem);
  239. }
  240. }
  241. }
  242. function _ScanSpecialElements()
  243. {
  244. var i;
  245. var elem;
  246. if (_idTemplateSource)
  247. {
  248. elem = window.document.all(_idTemplateSource);
  249. }
  250. else
  251. {
  252. elem = element;
  253. }
  254. var rgspan = elem.all.tags("SPAN");
  255. var cspan = rgspan.length;
  256. for (i = 0; i < cspan; i++)
  257. {
  258. var span = rgspan[i];
  259. if (null != span.lbDisplayName)
  260. _idDisplayName = span.id; 
  261. }
  262. var rgtr = elem.all.tags("TR");
  263. var ctr = rgtr.length;
  264. for (i = ctr - 1; i >= 0; i--)
  265. {
  266. var trElem = rgtr[i];
  267. if (null != trElem.lbExpandedRow)
  268. {
  269. var bEnable = (null != trElem.lbDisable) ? false : true;
  270. _StoreTemplateRow(trElem, _cRowsExpand++, bEnable);
  271. trElem.parentElement.deleteRow(trElem.rowIndex);
  272. }
  273. }
  274. _htmlRow = elem.innerHTML;
  275. if (_idTemplateSource)
  276. {
  277. elem.innerHTML = "";
  278. }
  279. }
  280. function _PrepHTML()
  281. {
  282. if (false == _bFreeze)
  283. {
  284. window.attachEvent("onload", _OnDocumentLoad);
  285. element.style.display = 'none';
  286. }
  287. }
  288. function _CreateHTML()
  289. {
  290. if (_idDataSource)
  291. {
  292. element.innerHTML = 
  293. '<DIV ' + c_szStyle_Background + '> ' +
  294. '   <DIV ' + c_szStyle_Feedback + '> ' + 
  295. _szFeedBack +
  296. '   </DIV>' + 
  297. '   <TABLE id=idTbl_' + uniqueID + ' ' + c_szStyle_Table + ' datasrc=#' + _idDataSource + ' cellpadding=0 cellspacing=0 style="display:none"> ' +
  298. '       <TBODY>                     ' +
  299. '           <TR> ' +
  300. '               <TD width=100%>     ' +
  301. _htmlRow +
  302. '               </TD> ' +
  303. '           </TR> ' +
  304. '       </TBODY> ' +
  305. '   </TABLE> ' +
  306. '</DIV';
  307. _dvFeedBack = element.children[0].children[0];
  308. _tblList = element.children[0].children[1];
  309. if (_szFeedBack == "")
  310. _dvFeedBack.style.display = 'none';
  311. else 
  312. _tblList.style.display = 'none';
  313. _tblList.attachEvent("onreadystatechange", _OnTableReady);
  314. }
  315. else
  316. {
  317. if ("" == _htmlRow)
  318. {
  319. _htmlRow = '<TABLE></TABLE>';
  320. }
  321. element.innerHTML = 
  322. '<DIV ' + c_szStyle_Background + '> ' +
  323. _htmlRow +
  324. '</DIV';
  325. _tblList = element.children[0].children[0];
  326. element.style.display = '';
  327. }
  328. _divScroll = element.children[0];
  329. _divScroll.attachEvent("onresize", _OnResize);
  330. _tblList.attachEvent("onclick", _OnClick);
  331. }
  332. function InheritProperties(elemTo, elemFrom)
  333. {
  334. elemTo['id'] = elemFrom['id'];
  335. elemTo['className'] = elemFrom['className'];
  336. if (elemTo._bStore)
  337. elemTo['tagName'] = elemFrom['tagName'];
  338. if ('TR' != elemFrom['tagName'])
  339. elemTo['innerHTML'] = elemFrom['innerHTML'];
  340. elemTo['colSpan'] = elemFrom['colSpan'];
  341. }
  342. function _StoreTemplateRow(trTemplate, iRowStore, bEnable)
  343. {
  344. var ctd = trTemplate.cells.length;
  345. var i;
  346. var rowStore = new Array(ctd);
  347. rowStore._ctd = ctd;
  348. rowStore._bStore = true;
  349. rowStore._bEnable = bEnable;
  350. InheritProperties(rowStore, trTemplate);
  351. for (i = 0; i < ctd; i++)
  352. {
  353. rowStore[i] = new Object();
  354. rowStore[i]._bStore = true;
  355. InheritProperties(rowStore[i], trTemplate.cells(i));
  356. }
  357. _rgTemplateRows[iRowStore] = rowStore;
  358. }
  359. function _CollapseRow(tblElem)
  360. {
  361. var cRow = _cRowsAdded;
  362. for (; 0 < cRow; cRow--)
  363. {
  364. tblElem.deleteRow();
  365. }
  366. _cRowsAdded = 0;
  367. }
  368. function _ExpandRow(tblElem)
  369. {
  370. var iRow;
  371. _cRowsAdded = 0;
  372. for (iRow = _cRowsExpand - 1; iRow >= 0; iRow--)
  373. {
  374. var rowTemplate = _rgTemplateRows[iRow];
  375. if (rowTemplate._bEnable)
  376. {
  377. var trNew = tblElem.insertRow();
  378. if (trNew)
  379. {
  380. var cCol = rowTemplate._ctd;
  381. var iCol;
  382. InheritProperties(trNew, rowTemplate);
  383. for (iCol = 0; iCol < cCol; iCol++)
  384. {
  385. var tdNew = trNew.insertCell();
  386. if (tdNew)
  387. InheritProperties(tdNew, rowTemplate[iCol]);
  388. }
  389. _cRowsAdded++;
  390. }
  391. }
  392. }
  393. }
  394. var ASF_SELECT = 0x01;
  395. var ASF_FOCUS = 0x02;
  396. function _ApplySelectionStyle(tblElem, state)
  397. {
  398. var elemDisplayName = tblElem.all(_idDisplayName);
  399. var trDisplayName = _GetParentElem(elemDisplayName, "TR");
  400. if (state & ASF_SELECT)
  401. {
  402. if (state & ASF_FOCUS)
  403. {
  404. trDisplayName.style.backgroundColor = 'highlight';
  405. trDisplayName.style.color = 'highlighttext';
  406. elemDisplayName.style.fontWeight = 'bold';
  407. tblElem.style.backgroundColor = 'highlight';
  408. tblElem.style.color = 'highlighttext';
  409. }
  410. else
  411. {
  412. trDisplayName.style.backgroundColor = 'buttonface';
  413. trDisplayName.style.color = '';
  414. elemDisplayName.style.fontWeight = 'bold';
  415. tblElem.style.backgroundColor = 'buttonface';
  416. tblElem.style.color = '';
  417. }
  418. }
  419. else
  420. {
  421. trDisplayName.style.backgroundColor = '';
  422. trDisplayName.style.color = '';
  423. elemDisplayName.style.fontWeight = '';
  424. tblElem.style.backgroundColor = '';
  425. tblElem.style.color = '';
  426. }
  427. }
  428. function _MakeRowVisible(trSel)
  429. {
  430. var yTop = trSel.offsetTop - _divScroll.scrollTop;
  431. var yBottom = trSel.offsetTop + trSel.offsetHeight - _divScroll.scrollTop;
  432. if (yBottom > _divScroll.offsetHeight)
  433. {
  434. _divScroll.scrollTop += yBottom - _divScroll.offsetHeight;
  435. }
  436. else if (yTop < 0)
  437. {
  438. _divScroll.scrollTop += yTop;
  439. }
  440. }
  441. function _SetTabIndex(elem, bSet, bFireFocus)
  442. {
  443. if (elem)
  444. {
  445. if (bSet)
  446. {
  447. var tabIndexOriginal = elem.tabIndex;
  448. elem.tabIndex = 0;
  449. if (bFireFocus && _bHasFocus && !elem._bFocus)
  450. {
  451. var focusChangeOriginal = _bInternalFocusChange;
  452. _bInternalFocusChange = true;
  453. try
  454. {
  455. elem.focus();
  456. }
  457. catch(e)
  458. {
  459. elem.tabIndex = tabIndexOriginal;
  460. _bInternalFocusChange = focusChangeOriginal;
  461. }
  462. }
  463. }
  464. else
  465. elem.tabIndex = -1;
  466. }
  467. }
  468. function _AttachItemEvents(elem)
  469. {
  470. if (elem)
  471. {
  472. if (null == elem._lbEventsBound)
  473. {
  474. elem._lbEventsBound = true;
  475. elem.attachEvent("onkeydown", _OnKeyDownItem);
  476. elem.attachEvent("onblur", _OnBlurItem);
  477. elem.attachEvent("onfocus", _OnFocusItem);
  478. }
  479. }
  480. }
  481. function _GetItemSrcChild(trElem)
  482. {
  483. if (trElem)
  484. {
  485. return trElem.children[0].children[0];
  486. }
  487. return null;
  488. }
  489. function _GetItemDisplayNameElem(trElem)
  490. {
  491. var srcChild = _GetItemSrcChild(trElem);
  492. if (srcChild)
  493. return srcChild.all(_idDisplayName);
  494. return null;
  495. }
  496. function _SelectItem(iSelNew, bFireFocus)
  497. {
  498. var bRet = false;
  499. var trElem;
  500. var srcChild;
  501. var elemDisplayName;
  502. var stateFocus = _bHasFocus ? ASF_FOCUS : 0;
  503. if (-1 != _iSelCur)
  504. {
  505. if (iSelNew == _iSelCur)
  506. {
  507. return false;
  508. }
  509. trElem = _tblList.rows(_iSelCur);
  510. srcChild = _GetItemSrcChild(trElem);
  511. elemDisplayName = srcChild.all(_idDisplayName);
  512. _FireCustomDraw(trElem, srcChild, false, 'prepaint');
  513. _FireSelectItem(trElem, srcChild, 'deselected');
  514. _ApplySelectionStyle(srcChild, stateFocus);
  515. if (_bAutoExpand)
  516. _CollapseRow(srcChild);
  517. _FireCustomDraw(trElem, srcChild, false, 'postpaint');
  518. _SetTabIndex(elemDisplayName, false, false);
  519. }
  520. if (0 == _tblList.rows.length)
  521. iSelNew = -1;
  522. else if (iSelNew >= _tblList.rows.length)
  523. iSelNew = _tblList.rows.length - 1;
  524. _iSelCur = iSelNew;
  525. if (-1 != _iSelCur)
  526. {
  527. var recordset = _GetRecordset();
  528. trElem = _tblList.rows(_iSelCur);
  529. srcChild = _GetItemSrcChild(trElem);
  530. elemDisplayName = srcChild.all(_idDisplayName);
  531. if (recordset && recordset.state != 0)
  532. recordset.AbsolutePosition = trElem.recordNumber;
  533. _FireCustomDraw(trElem, srcChild, true, 'prepaint');
  534. _ApplySelectionStyle(srcChild, ASF_SELECT | stateFocus);
  535. if (_bAutoExpand)
  536. _ExpandRow(srcChild);
  537. _MakeRowVisible(trElem);
  538. _FireCustomDraw(trElem, srcChild, true, 'postpaint');
  539. _FireSelectItem(trElem, srcChild,'selected');
  540. _SetTabIndex(elemDisplayName, true, bFireFocus);
  541. _AttachItemEvents(elemDisplayName);
  542. bRet = true;
  543. }
  544. return bRet;
  545. }
  546. function _PaintSelectedItem(stateFocus)
  547. {
  548. if (-1 < _iSelCur)
  549. {
  550. var trElem = _tblList.rows(_iSelCur);
  551. if (trElem)
  552. {
  553. var srcChild = _GetItemSrcChild(trElem);
  554. if (srcChild)
  555. {
  556. var elemDisplayName = srcChild.all(_idDisplayName);
  557. _ApplySelectionStyle(srcChild, ASF_SELECT | stateFocus);
  558. _FireSetFocus(trElem, srcChild, stateFocus & ASF_FOCUS);
  559. }
  560. }
  561. }
  562. }
  563. function _FireSelectItem(trElem, srcChild, szState)
  564. {
  565. var evt = createEventObject();
  566. evt.srcIndex = _iSelCur;
  567. evt.srcRow = trElem;
  568. evt.selState = szState;
  569. evt.srcChild = srcChild;
  570. evt.Recordset = _GetRecordset();
  571. onSelectItem.fire(evt);
  572. }
  573. function _FireCustomDraw(trElem, srcChild, bSelected, drawStage)
  574. {
  575. var evt = createEventObject();
  576. evt.srcIndex = _iSelCur;
  577. evt.srcRow = trElem;
  578. evt.srcChild = srcChild;
  579. evt.Recordset = _GetRecordset();
  580. evt.drawStage = drawStage; 
  581. evt.bSelected = bSelected;
  582. evt.bFocus = _bHasFocus;
  583. onCustomDraw.fire(evt);
  584. }
  585. function _FireSetFocus(trElem, srcChild, bFocus)
  586. {
  587. var evt = createEventObject();
  588. evt.srcIndex = _iSelCur;
  589. evt.srcRow = trElem;
  590. evt.srcChild = srcChild;
  591. evt.bFocus = bFocus;
  592. onSetFocus.fire(evt);
  593. }
  594. function _FindTemplateByID(id)
  595. {
  596. var i;
  597. for (i = 0; i < _cRowsExpand; i++)
  598. {
  599. if (_rgTemplateRows[i].id == id)
  600. return _rgTemplateRows[i];
  601. }
  602. return null;
  603. }
  604. function EnableTemplate(idTemplate, bEnable)
  605. {
  606. var rowTemplate = _FindTemplateByID(idTemplate);
  607. if (rowTemplate)
  608. rowTemplate._bEnable = bEnable ? true : false;
  609. }
  610. function Refresh()
  611. {
  612. _ScanSpecialElements();
  613. _CreateHTML();
  614. }
  615. function focus()
  616. {
  617. if (_tblList && -1 != _iSelCur)
  618. {
  619. var trElem = _tblList.rows(_iSelCur);
  620. var elem = _GetItemDisplayNameElem(trElem);
  621. if (elem)
  622. {
  623. try
  624. {
  625. elem.focus();
  626. }
  627. catch(e)
  628. {
  629. }
  630. }
  631. }
  632. else
  633. {
  634. _bHasFocus = true;
  635. }
  636. }
  637. function blur()
  638. {
  639. if (_tblList && -1 != _iSelCur)
  640. {
  641. var trElem = _tblList.rows(_iSelCur);
  642. var elem = _GetItemDisplayNameElem(trElem);
  643. if (elem)
  644. elem.blur();
  645. }
  646. else
  647. {
  648. _bHasFocus = false;
  649. }
  650. }
  651. function _OnRowsDelete()
  652. {
  653. if (window.event.qualifier == _szRecordSetName)
  654. {
  655. if (-1 != _iSelCur)
  656. {
  657. var trSelCur = _tblList.rows(_iSelCur);
  658. var recordset = _GetRecordset();
  659. var rsClone = recordset.Clone();
  660. if (null != rsClone)
  661. {
  662. var rgbkmk = window.event.bookmarks;
  663. var cbkmk = rgbkmk.length;
  664. var i;
  665. for (i = 0; i < cbkmk; i++)
  666. {
  667. rsClone.Bookmark = rgbkmk(i);
  668. if (rsClone.AbsolutePosition == trSelCur.recordNumber)
  669. {
  670. var iSelT = _iSelCur + 1;
  671. var bDec = true;
  672. if (_iSelCur == _tblList.rows.length - 1)
  673. {
  674. iSelT = _iSelCur - 1; 
  675. bDec = false;
  676. }
  677. _SelectItem(iSelT, true);
  678. if (bDec)
  679. {
  680. _iSelCur--;
  681. }
  682. }
  683. }
  684. }
  685. }
  686. }
  687. }
  688. function _InternalResetSelection()
  689. {
  690. _iSelCur = -1;
  691. _cRowsAdded = 0;
  692. }
  693. function ResetSelection()
  694. {
  695. _SelectItem(-1, true);
  696. }
  697. var KC_UP = 38;
  698. var KC_DOWN = 40;
  699. var KC_END = 35;
  700. var KC_HOME = 36;
  701. var KC_PGUP = 33;
  702. var KC_PGDOWN = 34;
  703. function _OnKeyDown()
  704. {
  705. var keyCode = window.event.keyCode;
  706. switch (keyCode)
  707. {
  708. case KC_UP:
  709. case KC_DOWN:
  710. case KC_END:
  711. case KC_HOME:
  712. case KC_PGUP:
  713. case KC_PGDOWN:
  714. window.event.returnValue = false;
  715. break;
  716. }
  717. }
  718. function _OnKeyDownItem()
  719. {
  720. var keyCode = window.event.keyCode;
  721. var iSelT = _iSelCur;
  722. var bDoSomething = false;
  723. switch (keyCode)
  724. {
  725. case KC_UP:
  726. if (iSelT > 0)
  727. iSelT--;
  728. break;
  729. case KC_DOWN:
  730. if (iSelT < _tblList.rows.length - 1)
  731. iSelT++;
  732. break;
  733. case KC_HOME:
  734. iSelT = 0;
  735. break;
  736. case KC_END:
  737. iSelT = _tblList.rows.length - 1;
  738. break;
  739. case KC_PGUP:
  740. iSelT = _iSelCur - _nItemsPerPage;
  741. if (iSelT < 0)
  742. iSelT = 0;
  743. break;
  744. case KC_PGDOWN:
  745. iSelT = _iSelCur + _nItemsPerPage;
  746. if (iSelT > _tblList.rows.length - 1)
  747. iSelT = _tblList.rows.length - 1;
  748. break;
  749. }
  750. if (iSelT != _iSelCur)
  751. {
  752. _SelectItem(iSelT, true);
  753. window.event.returnValue = false;
  754. }
  755. }
  756. function _OnResize()
  757. {
  758. _CalcItemsPerPage();
  759. }
  760.  
  761. function _OnClick()
  762. {
  763. var elem = window.event.srcElement;
  764. var trTopParent = _GetTopmostElem(elem, "TR");
  765. if (trTopParent)
  766. {
  767. var elemDisplayName = trTopParent.all(_idDisplayName);
  768. var iRow = trTopParent.rowIndex;
  769. var bFireFocus = true;
  770. var bOldFocus = _bHasFocus;
  771. if (elem == elemDisplayName && iRow == _iSelCur)
  772. {
  773. bFireFocus = false;
  774. }
  775. _bHasFocus = true;
  776. if (false == _SelectItem(iRow, bFireFocus) && 
  777. bOldFocus != _bHasFocus)
  778. {
  779. _PaintSelectedItem(ASF_FOCUS);
  780. if (bFireFocus)
  781. {
  782. _SetTabIndex(elemDisplayName, true, true);
  783. }
  784. }
  785. }
  786. }
  787. function _OnBlurItem()
  788. {
  789. var elem = window.event.srcElement;
  790. elem._bFocus = false;
  791. if (true == _bHasFocus && false == _bInternalFocusChange)
  792. {
  793. _bHasFocus = false;
  794. _PaintSelectedItem(0);
  795. }
  796. _bInternalFocusChange = false;
  797. }
  798. function _OnFocusItem()
  799. {
  800. var elem = window.event.srcElement;
  801. elem._bFocus = true;
  802. if (false == _bHasFocus)
  803. {
  804. _bHasFocus = true;
  805. _PaintSelectedItem(ASF_FOCUS);
  806. }
  807. _bInternalFocusChange = false;
  808. }
  809. function _OnError(szMsg, szUrl, iLine)
  810. {
  811. alert("An unexpected error occurred.\n\n" + szMsg + "\n" + szUrl + "\nLine: " + iLine);
  812. return true; 
  813. }
  814. function _GetTopmostElem(elem, tagFind)
  815. {
  816. var elemLast = null;
  817. while (elem != element)
  818. {
  819. if (tagFind == elem.tagName.toUpperCase())
  820. elemLast = elem;
  821. elem = elem.parentElement;
  822. }
  823. return elemLast;
  824. }
  825. function _GetParentElem(elem, tagFind)
  826. {
  827. while (elem != element)
  828. {
  829. if (tagFind == elem.tagName.toUpperCase())
  830. return elem;
  831. elem = elem.parentElement;
  832. }
  833. return null;
  834. }
  835. </SCRIPT><PROPERTY name="dataSource" get=get_dataSource put=put_dataSource /><PROPERTY name="selectionIndex" get=get_selIndex put=put_selIndex /><PROPERTY name="defaultSelection" get=get_defaultSel put=put_defaultSel /><PROPERTY name="autoExpand" get=get_autoExpand put=put_autoExpand /><PROPERTY name="freeze" get=get_freeze put=put_freeze /><PROPERTY name="feedBack" get=get_feedBack put=put_feedBack /><PROPERTY name="templateSource" get=get_templateSource put=put_templateSource /></PUBLIC:HTC>